00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef DEDRIVER_HPP
00047 #define DEDRIVER_HPP
00048
00049 #include "deGlobalTypes.hpp"
00050 #include "deArray.hpp"
00051
00052 #if defined(DEDRIVER_DLL_EXPORTS) || defined(DESTINY3D_EXPORT_ALL)
00053 # define DEDRIVER_API extern "C" DEDLL_EXPORT
00054 #elif defined(DESTINY3D_STATIC_LINK)
00055 # define DEDRIVER_API extern "C"
00056 #else
00057 # define DEDRIVER_API extern "C" DEDLL_IMPORT
00058 #endif
00059
00060 #ifdef USING_DESTINY3D
00061 #ifdef _DEBUG
00062 # ifdef DESTINY3D_STATIC_LINK
00063 # pragma comment(lib, "deDriver_sd")
00064 # else
00065 # pragma comment(lib, "deDriverd")
00066 # endif //DESTINY3D_STATIC_LINK
00067 #else
00068 # ifdef DESTINY3D_STATIC_LINK
00069 # pragma comment(lib, "deDriver_s")
00070 # else
00071 # pragma comment(lib, "deDriver")
00072 # endif //DESTINY3D_STATIC_LINK
00073 #endif //_DEBUG
00074 #endif //USING_DESTINY3D
00075
00076
00077
00078
00079
00080 class IdeDriver;
00081 class IdeVertexBuffer;
00082 class IdeShader;
00083 class deDriverLoad;
00084 class IdeDriverLoad;
00085 class IdeBitmap;
00086 class IdeBitmapProxy;
00087 class IdeFileSystem;
00088 class deString;
00089 class IdeRenderState;
00090 class IdeFile;
00091 struct deTransformInfo;
00092
00093
00094
00095
00096
00097
00098
00099
00100 typedef struct deDriverInfo deDriverInfo;
00101
00102
00103 typedef deBoolean (*ISDESTINY3DDRIVER)();
00104 typedef IdeDriver *(*GETDRIVERINSTANCE)(long ID);
00105 typedef const deDriverInfo *(*GETDRIVERINFO)(long StructSize);
00106
00107
00108
00109
00110
00111
00112
00113 typedef struct deDriverInfo
00114 {
00115 char * Name;
00116 long Major;
00117 long Minor;
00118 long Revision;
00119 char * DLL;
00120 } deDriverInfo;
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 DE3D_INTERFACE_(IdeDriver)
00140 {
00141 public:
00142
00143 enum Types
00144 {
00145 DRIVER_INVALID = -1,
00146 DRIVER_DIRECT3D8 = 0,
00147 DRIVER_DIRECT3D9 = 2,
00148 DRIVER_OPENGL = 1,
00149 DRIVER_COUNT,
00150 DRIVER_FORCE_32BIT = 0x7FFFFFFF
00151 };
00152
00153
00154 enum BPP
00155 {
00156 BPP_UNKNOWN = 0,
00157 BPP_X1R5G5B5,
00158 BPP_A1R5G5B5,
00159 BPP_A4R4G4B4,
00160 BPP_X4R4G4B4,
00161 BPP_A8,
00162 BPP_R3G3B2,
00163 BPP_A8R3G3B2,
00164 BPP_A2B10G10R10,
00165 BPP_G16R16,
00166 BPP_R5G6B5,
00167 BPP_R8G8B8,
00168 BPP_A8R8G8B8,
00169 BPP_X8R8G8B8,
00170 BPP_P8,
00171 BPP_A8P8,
00172 BPP_L8,
00173 BPP_A8L8,
00174 BPP_A4L4,
00175 BPP_V8U8,
00176 BPP_Q8W8V8U8,
00177 BPP_V16U16,
00178 BPP_W11V11U10,
00179 BPP_L6V5U5,
00180 BPP_X8L8V8U8,
00181 BPP_A2W10V10U10,
00182 BPP_UYVY,
00183 BPP_YUY2,
00184 BPP_DXT1,
00185 BPP_DXT2,
00186 BPP_DXT3,
00187 BPP_DXT4,
00188 BPP_DXT5,
00189 BPP_R16F,
00190 BPP_G16R16F,
00191 BPP_A16B16G16R16F,
00192 BPP_R32F,
00193 BPP_G32R32F,
00194 BPP_A32B32G32R32F,
00195 BPP_COUNT,
00196 BPP_FORCE_32BIT = 0x7FFFFFFF
00197 };
00198
00199
00200 enum ZPP
00201 {
00202 ZPP_UNKNOWN = 0,
00203 ZPP_D16,
00204 ZPP_D15S1,
00205 ZPP_D24,
00206 ZPP_D24S4,
00207 ZPP_D24S8,
00208 ZPP_D32,
00209 ZPP_COUNT,
00210 ZPP_FORCE_32BIT = 0x7FFFFFFF
00211 };
00212
00213
00214
00215 enum RenderState
00216 {
00217 RENDER_ZENABLE = 0,
00218 RENDER_ZENABLEUSEW,
00219 RENDER_ZWRITESENABLE,
00220 RENDER_DEPTHFUNCTION,
00221 RENDER_DEPTHBIAS,
00222 RENDER_FILLMODE,
00223 RENDER_SHADEMODE,
00224 RENDER_COLORMASK,
00225 RENDER_ALPHATESTENABLE,
00226 RENDER_ALPHAREF,
00227 RENDER_ALPHAFUNCTION,
00228 RENDER_ALPHABLENDENABLE,
00229 RENDER_SOURCEBLEND,
00230 RENDER_DESTBLEND,
00231 RENDER_TEXTUREFACTOR,
00232 RENDER_CULLMODE,
00233 RENDER_FSAAENABLE,
00234 RENDER_FSAAMASK,
00235 RENDER_FOGENABLE,
00236 RENDER_FOGSTART,
00237 RENDER_FOGEND,
00238 RENDER_FOGCOLOR,
00239 RENDER_CLIPPINGENABLE,
00240 RENDER_SWVERTEXPROCESS,
00241 RENDER_HWLIGHTINGENABLE,
00242 RENDER_AMBIENTLIGHT,
00243 RENDER_DITHERENABLE,
00244 RENDER_SPECULARENABLE,
00245 RENDER_SPECULARPERSPECTIVE,
00246 RENDER_PERVERTEXCOLOR,
00247 RENDER_STENCILENABLE,
00248 RENDER_TWOSIDEDSTENCILENABLE,
00249 RENDER_STENCILREF,
00250 RENDER_STENCILMASK,
00251 RENDER_STENCILWRITEMASK,
00252 RENDER_STENCILFUNCTION,
00253 RENDER_STENCILFAIL,
00254 RENDER_STENCILZFAIL,
00255 RENDER_STENCILPASS,
00256 RENDER_CCW_STENCILFUNCTION,
00257 RENDER_CCW_STENCILFAIL,
00258 RENDER_CCW_STENCILZFAIL,
00259 RENDER_CCW_STENCILPASS,
00260 RENDER_COUNT,
00261 RENDER_FORCE_32BIT = 0x7FFFFFFF
00262 };
00263
00264
00265 enum RenderFillMode
00266 {
00267 FILL_POINT = 0,
00268 FILL_WIREFRAME,
00269 FILL_SOLID,
00270 FILL_COUNT,
00271 FILL_FORCE_32BIT = 0x7FFFFFFF
00272 };
00273
00274
00275 enum RenderCullMode
00276 {
00277 CULL_NONE = 0,
00278 CULL_CW,
00279 CULL_CCW,
00280 CULL_COUNT,
00281 CULL_FORCE_32BIT = 0x7FFFFFFF
00282 };
00283
00284
00285 enum RenderShadeMode
00286 {
00287 SHADE_FLAT = 0,
00288 SHADE_GOURAUD,
00289 SHADE_COUNT,
00290 SHADE_FORCE_32BIT = 0x7FFFFFFF
00291 };
00292
00293
00294 enum RenderCmpFunc
00295 {
00296 COMPARE_NEVER = 0,
00297 COMPARE_LESS,
00298 COMPARE_EQUAL,
00299 COMPARE_LESSEQUAL,
00300 COMPARE_GREATER,
00301 COMPARE_GREATEREQUAL,
00302 COMPARE_NOTEQUAL,
00303 COMPARE_ALWAYS,
00304 COMPARE_COUNT,
00305 COMPARE_FORCE_32BIT = 0x7FFFFFFF
00306 };
00307
00308
00309
00310
00311 enum RenderStencilOp
00312 {
00313 STENCIL_KEEP = 0,
00314 STENCIL_ZERO,
00315 STENCIL_REPLACE,
00316 STENCIL_INCRWRAP,
00317 STENCIL_DECRWRAP,
00318 STENCIL_INVERT,
00319 STENCIL_INCR,
00320 STENCIL_DECR,
00321 STENCIL_COUNT,
00322 STENCIL_FORCE_32BIT = 0x7FFFFFFF
00323 };
00324
00325
00326 enum RenderBlend
00327 {
00328 BLEND_ZERO = 0,
00329 BLEND_ONE,
00330 BLEND_SOURCE,
00331 BLEND_INVERSESOURCE,
00332 BLEND_SOURCEALPHA,
00333 BLEND_INVERSESOURCEALPHA,
00334 BLEND_DEST,
00335 BLEND_INVERSEDEST,
00336 BLEND_DESTALPHA,
00337 BLEND_INVERSEDESTALPHA,
00338 BLEND_SOURCEALPHASAT,
00339 BLEND_COUNT,
00340 BLEND_FORCE_32BIT = 0x7FFFFFFF
00341 };
00342
00343
00344 enum Resource
00345 {
00346 RESOURCE_UNKNOWN = -1,
00347 RESOURCE_DISPLAY,
00348 RESOURCE_DISPLAYWINDOWED,
00349 RESOURCE_TEXTURE,
00350 RESOURCE_RENDERTARGET,
00351 RESOURCE_DEPTHSTENCIL,
00352 RESOURCE_FSAA,
00353 RESOURCE_FSAAWINDOWED,
00354 RESOURCE_COUNT,
00355 RESOURCE_FORCE_32BIT = 0x7FFFFFFF
00356 };
00357
00358
00359 enum QualityFlag
00360 {
00361 QUALITY_UNKNOWN = -1,
00362 QUALITY_ALLOW_TEXTURE_MANGLING,
00363 QUALITY_ALLOW_INVALID_TEXTURES,
00364 QUALITY_FLAG_COUNT,
00365 QUALITY_FORCE_32BIT = 0x7FFFFFFF
00366 };
00367
00368
00369 struct deDisplay
00370 {
00371 long Adapter;
00372 long Width;
00373 long Height;
00374 HMONITOR MonitorHandle;
00375 BPP BackBpp;
00376 BPP FrontBpp;
00377 ZPP Zpp;
00378 long ZDepth;
00379 long StencilDepth;
00380 long RefreshRate;
00381 long FSAASamples;
00382 deBoolean TripleBuffer;
00383 deBoolean Windowed;
00384 deBoolean IgnoreVSync;
00385 };
00386
00387
00388 struct deDriverStats
00389 {
00390 long VBufferUploads;
00391 long TextureUploads;
00392 long BytesUsed;
00393 };
00394
00395
00396 struct deDriverCaps
00397 {
00398 char AdapterDescription[255];
00399 deBoolean HWTnL;
00400 deBoolean Dot3Support;
00401 long MaxTextureBitDepth;
00402 long SimulTextures;
00403 long TexWidth;
00404 long TexHeight;
00405 long NumStreams;
00406 long MaxVert;
00407 long MaxPrim;
00408 long MaxLights;
00409 long VertCacheSize;
00410 deFloat VShader;
00411 deFloat PShader;
00412 };
00413
00414 protected:
00415 virtual ~IdeDriver() {}
00416 public:
00417
00418 virtual long Release() = 0;
00419 virtual deBoolean Init(HWND WindowHandle) = 0;
00420
00421
00422
00423
00424 virtual deBoolean SetDisplay(deDisplay *Display) = 0;
00425
00426
00427
00428 virtual deBoolean Reset(deDisplay *Display = NULL) = 0;
00429
00430 virtual const deDisplay* GetDisplay() const = 0;
00431
00432
00433 virtual deBoolean GetCurrentDisplay(long Adapter, deDisplay * Display) const = 0;
00434
00435
00436 virtual deBoolean GetDisplayMode(long Adapter, long Mode, deDisplay *Display) const = 0;
00437
00438 virtual const deDriverCaps* GetCaps(long Adapter) const = 0;
00439
00440 virtual deRect UpdateWindowRect() = 0;
00441
00442 virtual deRect GetDisplayRect() const = 0;
00443
00444
00445 virtual long GetAdapterCount() const = 0;
00446
00447 virtual long GetModeCount(long Adapter) const = 0;
00448
00449 virtual deBoolean WindowedAllowed(long Adapter) const = 0;
00450
00451 virtual deBoolean ValidFormat(long Adapter, Resource ResourceType, BPP BPPType, ZPP ZPPType, BPP FrontBuffer, long ExtraFlag=0) const = 0;
00452
00453 virtual long BitDepth(BPP BPPType) const = 0;
00454
00455 virtual long BitDepth(ZPP ZPPType) const = 0;
00456
00457 virtual long StencilDepth(ZPP ZPPType) const = 0;
00458
00459 virtual deBoolean HasStencil(ZPP ZPPType) const = 0;
00460
00461
00462
00463 virtual deBoolean AddVertexBuffer(IdeVertexBuffer *Vertex) = 0;
00464
00465 virtual deBoolean RemoveVertexBuffer(IdeVertexBuffer *Vertex) = 0;
00466
00467 virtual deBoolean UpdateVertexBuffer(IdeVertexBuffer *Vertex) = 0;
00468
00469
00470 virtual deBoolean AddShader(IdeShader * Shader) = 0;
00471 virtual deBoolean SetShader(IdeShader * Shader) = 0;
00472 virtual deBoolean RemoveShader(IdeShader * Shader) = 0;
00473
00474
00475
00476 virtual deBoolean BeginFrame() = 0;
00477
00478 virtual deBoolean EndFrame() = 0;
00479
00480
00481 virtual deBoolean ClearFrame(deARGB Color, deBoolean ClearTarget = deTRUE, deBoolean ClearZBuffer = deTRUE, deBoolean ClearStencil = deTRUE) = 0;
00482
00483
00484 virtual deBoolean Render(IdeVertexBuffer *VBuffer, long IndexOffset, IdeVertexBuffer *IndexOverride = NULL) = 0;
00485
00486
00487
00488 virtual deBoolean SetViewport(long X, long Y, long Width, long Height, deFloat MinZ, deFloat MaxZ) = 0;
00489 virtual deBoolean SetDepthRange(deFloat MinZ, deFloat MaxZ) = 0;
00490
00491 virtual deBoolean SetFOVClipping(deFloat FOV, deFloat Aspect, deFloat ClipNear, deFloat ClipFar) = 0;
00492
00493 virtual deBoolean SetOrthoClipping(deFloat Width, deFloat Height, deFloat ClipNear, deFloat ClipFar, deBoolean Invert = deFALSE) = 0;
00494
00495 virtual deBoolean SetFOVClippingSubRect(deFloat FOVY, deFloat Aspect, deFloat ClipNear, deFloat ClipFar, deRect SubRect) = 0;
00496 virtual deBoolean SetFOVClippingSubRectFloat(deFloat FOVY, deFloat Aspect, deFloat ClipNear, deFloat ClipFar, deFloatRect SubRect) = 0;
00497
00498 virtual deBoolean SetOrthoClippingSubRect(deFloat Width, deFloat Height, deFloat ClipNear, deFloat ClipFar, deBoolean Invert, deRect SubRect) = 0;
00499 virtual deBoolean SetOrthoClippingSubRectFloat(deFloat Width, deFloat Height, deFloat ClipNear, deFloat ClipFar, deBoolean Invert, deFloatRect SubRect) = 0;
00500 virtual deBoolean SetScissorRect(deRect ScissorRect) = 0;
00501
00502
00503
00504 virtual deBoolean SetCameraTransform(deTransformInfo *M) = 0;
00505
00506
00507
00508 virtual deBoolean SetWorldTransform(deTransformInfo * Mat) = 0;
00509
00510
00511
00512 virtual deBoolean SetTextureTransform(long StageNum, deTransformInfo * Mat) = 0;
00513
00514
00515
00516 virtual deBoolean AddBitmap(IdeBitmap *Bitmap) = 0;
00517
00518 virtual deBoolean AddBitmapProxy(IdeBitmapProxy *BitmapProxy) = 0;
00519
00520 virtual deBoolean RemoveBitmap(IdeBitmap *Bitmap) = 0;
00521
00522
00523
00524
00525
00526
00527
00528 virtual deBoolean RenderTo(IdeBitmap *pBitmap, long CubeMapFace = 0) = 0;
00529
00530
00531
00532
00533
00534 virtual deBoolean ScreenShot(IdeBitmap * &pBitmap, deBoolean GrabWindow = deTRUE) = 0;
00535 virtual deBoolean GetVideoTexture(IdeBitmap* pBitmap, long CubeMapFace = 0) = 0;
00536
00537
00538
00539 virtual unsigned long GetRenderState(RenderState State) = 0;
00540
00541 virtual deBoolean SetRenderState(const IdeRenderState *State) = 0;
00542
00543 virtual deBoolean SetRenderState(RenderState State, unsigned long Value) = 0;
00544 virtual deBoolean EnableLight(long LightID, deBoolean Enable) = 0;
00545
00546 virtual deBoolean DisableAllLights() = 0;
00547
00548 virtual unsigned long GetQualityFlag(QualityFlag Flag) = 0;
00549
00550 virtual deBoolean SetQualityFlag(QualityFlag Flag, unsigned long Value) = 0;
00551
00552
00553
00554 virtual IdeDriver::Types GetType() const = 0;
00555
00556 virtual deDriverInfo *GetInfo() const = 0;
00557 virtual long GetCount() = 0;
00558
00559
00560
00561 virtual void LogInfo(char *Data, ...) = 0;
00562
00563 virtual deDriverStats* GetDriverStats() = 0;
00564
00565 virtual void ResetDriverStats() = 0;
00566 };
00567
00568
00569
00570
00571 DE3D_INTERFACE_(IdeDriverLoad)
00572 {
00573 protected:
00574 virtual ~IdeDriverLoad() {}
00575 public:
00576 virtual long Release() = 0;
00577
00578
00579
00580 virtual long GetCount() = 0;
00581 virtual const deDriverInfo *GetInfo(long DriverNumber) = 0;
00582 virtual const deDriverInfo *GetInfo(char *DriverName) = 0;
00583
00584 virtual IdeDriver *GetDriver(long DriverNumber) = 0;
00585 virtual IdeDriver *GetDriver(char *DriverName) = 0;
00586 };
00587
00588
00589
00590
00591 DE3D_INTERFACE(IdeVertexBuffer, IdeRefCountBase)
00592 {
00593 public:
00594
00595 enum BufferType
00596 {
00597 BUFFER_POSITION = 0,
00598 BUFFER_NORMAL,
00599 BUFFER_DIFFUSE,
00600 BUFFER_SPECULAR,
00601 BUFFER_TEXTURECOORDS0,
00602 BUFFER_TEXTURECOORDS1,
00603 BUFFER_TEXTURECOORDS2,
00604 BUFFER_TEXTURECOORDS3,
00605 BUFFER_TEXTURECOORDS4,
00606 BUFFER_TEXTURECOORDS5,
00607 BUFFER_TEXTURECOORDS6,
00608 BUFFER_TEXTURECOORDS7,
00609 BUFFER_INDICES16,
00610 BUFFER_INDICES32,
00611 BUFFER_COUNT,
00612 BUFFER_FORCE_32BIT = 0x7FFFFFFF
00613 };
00614
00615
00616 enum RenderType
00617 {
00618 RENDER_POINTLIST = 0,
00619 RENDER_LINELIST,
00620 RENDER_LINESTRIP,
00621 RENDER_TRIANGLELIST,
00622 RENDER_TRIANGLESTRIP,
00623 RENDER_TRIANGLEFAN,
00624 RENDER_COUNT,
00625 RENDER_FORCE_32BIT = 0x7FFFFFFF
00626 };
00627
00628
00629 enum BufferDataType
00630 {
00631 BUFFER_DATALONG = 0,
00632 BUFFER_DATAFLOAT,
00633 BUFFER_DATAFLOAT2,
00634 BUFFER_DATAFLOAT3,
00635 BUFFER_DATASHORT,
00636 BUFFER_DATACOUNT,
00637 BUFFER_DATAFORCE_32BIT = 0x7FFFFFFF
00638 };
00639
00640
00641 enum VBufferType
00642 {
00643 BUFFERTYPE_REAL = 0,
00644 BUFFERTYPE_SUB,
00645 BUFFERTYPE_COUNT,
00646 BUFFERTYPE_FORCE_32BIT = 0x7FFFFFFF
00647 };
00648
00649 protected:
00650
00651 virtual ~IdeVertexBuffer() {}
00652
00653 public:
00654 virtual const IdeVertexBuffer& operator=(const IdeVertexBuffer &S) = 0;
00655
00656
00657 virtual void* GetBuffer(BufferType Type) const = 0;
00658
00659
00660 virtual long GetVertexCount() const = 0;
00661 virtual long GetVertexStart() const = 0;
00662
00663
00664 virtual long GetIndexCount() const = 0;
00665 virtual long GetIndexStart() const = 0;
00666
00667
00668 virtual long GetTriCount() const = 0;
00669 virtual deBoolean CalcTriCount() = 0;
00670
00671
00672 virtual deBoolean GetDynamicStatusVertex() const = 0;
00673 virtual deBoolean GetDynamicStatusIndex() const = 0;
00674 virtual void SetDynamicStatus(deBoolean Vertex, deBoolean Index) = 0;
00675
00676
00677 virtual RenderType GetRenderType() const = 0;
00678 virtual deBoolean SetRenderType(RenderType Type) = 0;
00679
00680
00681 virtual deBoolean SetBufferSize(long EntryCount, deBoolean IndicesNotVertices = deFALSE) = 0;
00682 virtual deBoolean CreateBuffer(BufferType Type, deBoolean Clear) = 0;
00683 virtual deBoolean DestroyBuffer(BufferType Type) = 0;
00684 virtual deBoolean FillBuffer(BufferType Type, const void *Buffer, long StartEntry, long EntryCount) = 0;
00685 virtual void DirtyBuffer(BufferType Type) = 0;
00686 virtual deBoolean BufferExists(BufferType Type) const = 0;
00687
00688
00689 virtual deBoolean BindDataBuffer(IdeVertexBuffer* DataBuffer) = 0;
00690 virtual IdeVertexBuffer* GetBoundDataBuffer() const = 0;
00691
00692
00693 virtual BufferDataType GetBufferDataType(BufferType Type, long *Size) const = 0;
00694
00695
00696 virtual deBoolean Lock() = 0;
00697 virtual deBoolean Unlock() = 0;
00698
00699
00700 virtual deBoolean SetDriverBuffer(long ID, void *Buffer, IdeDriver * Driver) = 0;
00701 virtual void *GetDriverBuffer(long ID, long *BufferUpdateList) const = 0;
00702
00703
00704 virtual VBufferType GetVBufferType() const = 0;
00705 virtual IdeVertexBuffer* GetParentBuffer() const = 0;
00706 };
00707
00708
00709
00710
00711 DE3D_INTERFACE(IdeVertexBuffer2, IdeRefCountBase)
00712 {
00713 public:
00714
00715 enum Primitive_t
00716 {
00717 RENDER_POINTLIST = 0,
00718 RENDER_LINELIST,
00719 RENDER_LINESTRIP,
00720 RENDER_TRIANGLELIST,
00721 RENDER_TRIANGLESTRIP,
00722 RENDER_TRIANGLEFAN,
00723 RENDER_COUNT,
00724 RENDER_FORCE_32BIT = 0x7FFFFFFF
00725 };
00726
00727 enum DataUsage_t
00728 {
00729
00730 USAGE_POSITION = 0,
00731 USAGE_NORMAL,
00732 USAGE_TEXCOORD,
00733 USAGE_COLOR,
00734
00735 USAGE_TANGENT,
00736 USAGE_BINORMAL,
00737 USAGE_BLENDWEIGHT,
00738 USAGE_BLENDINDICES,
00739 USAGE_FOG,
00740 USAGE_TESSFACTOR,
00741 USAGE_POSITION_T,
00742 USAGE_DEPTH,
00743 USAGE_SAMPLE,
00744 USAGE_COUNT,
00745 USAGE_FORCE_32BIT = 0x7FFFFFFF
00746 };
00747
00748
00749
00750 enum DataType_t
00751 {
00752 DATA_FLOAT32_1,
00753 DATA_FLOAT32_2,
00754 DATA_FLOAT32_3,
00755 DATA_FLOAT32_4,
00756 DATA_ARGB,
00757 DATA_U8_4,
00758 DATA_S16_2,
00759 DATA_S16_4,
00760 DATA_U8_4N,
00761 DATA_S16_2N,
00762 DATA_S16_4N,
00763 DATA_U16_2N,
00764 DATA_U16_4N,
00765 DATA_U10_3,
00766 DATA_S10_3N,
00767 DATA_FLOAT16_2,
00768 DATA_FLOAT16_4,
00769 DATA_COUNT,
00770 DATA_FORCE_32BIT = 0x7FFFFFFF
00771 };
00772 enum StreamFlag_t
00773 {
00774 FLAG_DYNAMIC,
00775 FLAG_INSTANCES,
00776 FLAG_COUNT,
00777 FLAG_FORCE_32BIT = 0x7FFFFFFF
00778 };
00779 struct UsageDescriptor_t
00780 {
00781 DataUsage_t Usage;
00782 u32 UsageIndex;
00783 };
00784
00785 struct StreamDescriptor_t
00786 {
00787 UsageDescriptor_t Usage;
00788 DataType_t Type;
00789 };
00790
00791 protected:
00792 virtual ~IdeVertexBuffer2() {}
00793 public:
00794
00795
00796 virtual void* LockStream(UsageDescriptor_t element) = 0;
00797 virtual deBoolean UnlockStream(UsageDescriptor_t element, deBoolean modified = deTRUE) = 0;
00798 virtual deBoolean CreateStream(UsageDescriptor_t element, DataType_t datatype) = 0;
00799 virtual deBoolean SetStreamFlag(UsageDescriptor_t element, StreamFlag_t flag, u32 value) = 0;
00800 virtual deBoolean GetStreamFlag(UsageDescriptor_t element, StreamFlag_t flag, u32* value) = 0;
00801
00802 virtual DataType_t GetStreamDataType(UsageDescriptor_t element) const = 0;
00803 virtual deBoolean StreamExists(UsageDescriptor_t element) const = 0;
00804
00805 virtual deBoolean SetVertexCount(u32 count) = 0;
00806 virtual deBoolean SetIndexCount(u32 count) = 0;
00807 virtual deBoolean SetPrimitiveType(Primitive_t primitiveType) = 0;
00808
00809 virtual u32 GetVertexCount() const = 0;
00810 virtual u32 GetIndexCount() const = 0;
00811 virtual u32 GetPrimitiveCount() const = 0;
00812 virtual Primitive_t GetPrimitiveType() const = 0;
00813
00814
00815 virtual deBoolean DriverSetInfo(IdeDriver * pDriver, void *Info) = 0;
00816 virtual void * DriverGetInfo(IdeDriver * pDriver, deBoolean* &UpdatedStreams) const = 0;
00817 virtual u32 DriverGetNumStreams() = 0;
00818 virtual StreamDescriptor_t* DriverGetStreamDescriptors();
00819 virtual u32 DriverLock() = 0;
00820 virtual u32 DriverUnlock() = 0;
00821 };
00822
00823
00824
00825 DE3D_INTERFACE(IdeShader, IdeRefCountBase)
00826 {
00827 public:
00828
00829 enum ShaderType
00830 {
00831 SHADER_INVALID = -1,
00832 SHADER_VERTEX,
00833 SHADER_PIXEL,
00834 SHADER_FORCE_32BIT = 0x7FFFFFFF
00835 };
00836
00837
00838 enum deShaderInstructionType
00839 {
00840 INSTRUCTION_VERSION_VERTEX = 0,
00841 INSTRUCTION_VERSION_PIXEL,
00842 INSTRUCTION_ADD,
00843 INSTRUCTION_DP3,
00844 INSTRUCTION_DP4,
00845 INSTRUCTION_DST,
00846 INSTRUCTION_EXPP,
00847 INSTRUCTION_LIT,
00848 INSTRUCTION_LOGP,
00849 INSTRUCTION_MAD,
00850 INSTRUCTION_MAX,
00851 INSTRUCTION_MIN,
00852 INSTRUCTION_MOV,
00853 INSTRUCTION_MUL,
00854 INSTRUCTION_RCP,
00855 INSTRUCTION_RSQ,
00856 INSTRUCTION_SGE,
00857 INSTRUCTION_SLT,
00858 INSTRUCTION_SUB,
00859 INSTRUCTION_DECLARE_CONSTANT,
00860 INSTRUCTION_DECLARE_MATRIX,
00861 INSTRUCTION_FORCE_32BIT = 0x7FFFFFFF
00862 };
00863
00864
00865 enum Argument
00866 {
00867 ARGUMENT_INVALID = 0,
00868 ARGUMENT_VERSION_1 = 0x00000001,
00869 ARGUMENT_CONSTANT = 0x00010000,
00870 ARGUMENT_TEMP = 0x00610000,
00871 ARGUMENT_VERTEX = 0x006D0000,
00872 ARGUMENT_OUTPOS = 0x007D0000,
00873 ARGUMENT_OUTCOLOR = 0x007E0000,
00874 ARGUMENT_OUTFOG = 0x00800000,
00875 ARGUMENT_OUTPTS = 0x00810000,
00876 ARGUMENT_OUTTEX = 0x00820000,
00877 ARGUMENT_OUTTEX_END = 0x008A0000,
00878 ARGUMENT_DE_TRANSFORM = 0,
00879 ARGUMENT_DE_PROJECTION = 1,
00880 ARGUMENT_DE_TRANSFORM_PROJECTION = 2,
00881 ARGUMENT_DE_IDENTITY = 3,
00882 ARGUMENT_DE_INVERSE = 4,
00883 ARGUMENT_DE_TRANSPOSE = 5,
00884 ARGUMENT_DE_INVERSE_TRANSPOSE = 6,
00885 ARGUMENT_FORCE_32BIT = 0x7FFFFFFF
00886 };
00887
00888
00889 struct deShaderInstruction
00890 {
00891 deShaderInstructionType Type;
00892 DWORD Arguments[3];
00893 };
00894
00895
00896 struct deShaderConstant
00897 {
00898 deShaderInstructionType Type;
00899 float Arguments[5];
00900 };
00901
00902 protected:
00903
00904 virtual ~IdeShader() {}
00905
00906
00907 public:
00908
00909
00910
00911 virtual deBoolean Assemble(char * Code,void (*ErrorCallback)(long LineNumber,char * Error)) = 0;
00912
00913
00914
00915 virtual deBoolean Disassemble(deString * Code) = 0;
00916
00917
00918 virtual ShaderType GetShaderType() const = 0;
00919
00920
00921 virtual long GetInstructionCount() const = 0;
00922
00923
00924 virtual const deTArray<deShaderInstruction> * GetInstructions() const = 0;
00925
00926
00927 virtual long GetConstantCount() const = 0;
00928
00929
00930 virtual const deTArray<deShaderConstant> * GetConstants() const = 0;
00931
00932
00933
00934 virtual deBoolean Write(IdeFile * File) const = 0;
00935
00936
00937
00938 virtual deBoolean Read(IdeFile * File) = 0;
00939
00940
00941
00942 virtual deBoolean SetDriverShader(void * Shader) = 0;
00943
00944
00945 virtual void * GetDriverShader() const = 0;
00946 };
00947
00948
00949
00950
00951
00952
00953
00954 DEDRIVER_API deBoolean IdeDriver_FillVersionInfo(deDriverInfo *DriverInfo, char *Date, char *Time);
00955
00956 DEDRIVER_API IdeDriverLoad* IdeDriverLoad_CreateDriverLoad(char const * path);
00957
00958 DEDRIVER_API deBoolean IdeDriver_Initialize();
00959 DEDRIVER_API long IdeDriver_BPPBitDepth(IdeDriver::BPP BPPType);
00960
00961 DEDRIVER_API IdeVertexBuffer* IdeVertexBuffer_CreateVBuffer();
00962
00963
00964 DEDRIVER_API IdeVertexBuffer* IdeVertexBuffer_CreateSubVBuffer(IdeVertexBuffer * Composite);
00965 DEDRIVER_API long IdeVertexBuffer_EntrySize(IdeVertexBuffer::BufferType Type);
00966 DEDRIVER_API IdeVertexBuffer::BufferDataType IdeVertexBuffer_FillBufferDataType(IdeVertexBuffer::BufferType Type, long *Size);
00967 DEDRIVER_API IdeShader* IdeShader_Create();
00968
00969
00970 #endif